{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-04T03:07:03.533042Z",
     "start_time": "2018-12-04T03:07:00.011967Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nx8NBlxi1AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f6a3069da0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f6a304eeb8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhgAAAF5CAYAAADdxFNyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xu83XV95/vXZydcEwhC5LJzQUhAU0EgAQQdoJWKeCkV\nW6055nhvyjid6eQ8bDu0psbkzGDp2NjqMDVDi8dDmzOe6QGZWhVFK6JVbEIExlgSBHLDAMGGJFyT\n/T1//NbOvu+91t6/tX6X9Xo+HvsR9lq/vfb3t9Zi/97r+/18v99IKSFJkpSnnqIbIEmS6seAIUmS\ncmfAkCRJuTNgSJKk3BkwJElS7gwYkiQpdwYMSZKUOwOGJEnKnQFDkiTlzoAhSZJyV6qAERHXR8S9\nEfFMROyOiNsi4uxRjlsdEbsi4tmI+HpELCyivZIkaXSlChjAZcBngNcCvwwcAdwZEcf0HxARvw/8\nNrAcuBg4AHwtIo7sfHMlSdJoosybnUXEbOAJ4PKU0j2N23YBf5JSWtv4/nhgN/C+lNIXC2usJEk6\nrGw9GMOdACTgaYCIOAM4Fbir/4CU0jPAD4BLi2igJEkaqbQBIyIC+DRwT0rpx42bTyULHLuHHb67\ncZ8kSSqB6UU3YBw3Ab8AvH4qDxIRJwFvAh4Fnp96syRJ6hpHA68AvpZS2tPKD5YyYETEZ4G3AJel\nlB4fdNfPgABOYWgvxinAfWM83JuAv25HOyVJ6hLvAf6mlR8oXcBohItfBa5IKW0bfF9K6ZGI+Blw\nJXB/4/jjyWad/JcxHvJRgFtvvZVFixa1q9mlsGLFCtauXVt0M9rO86yfbjlXz7NeuuE8N2/ezLJl\ny6BxLW1FqQJGRNwELAWuAQ5ExCmNu/amlPqHNz4NfCwitpKd8BpgB/ClMR72eYBFixaxePHidjW9\nFGbNmlX7cwTPs4665Vw9z3rplvNsaLnEoFQBA7iOrIjzH4bd/gHgCwAppRsj4ljgc2SzTL4DvDml\n9GIH2ylJksZRqoCRUmpqVktKaRWwqq2NkSRJk1baaaqSJKm6DBg1snTp0qKb0BGeZ/10y7l6nvXS\nLec5WaVeKjwPEbEY2LBhw4ZuKsaRJGnKNm7cyJIlSwCWpJQ2tvKz9mBIkqTcGTAkSVLuDBiSJCl3\nBgxJkpQ7A4YkScqdAUOSJOXOgCFJknJnwJAkSbkzYEiSpNwZMCRJUu4MGJIkKXcGDEmSlDsDhiRJ\nyp0BQ5Ik5c6AIUmScmfAkCRJuTNgSJKk3BkwJElS7gwYkiQpdwYMSZKUOwOGJEnKnQFDkiTlzoAh\nSZJyZ8CQJEm5M2BIkqTcGTAkSVLuDBiSJCl3BgxJkpQ7A4YkScqdAUOSJOXOgCFJknJnwJAkSbkz\nYEiSpNwZMCRJUu4MGJIkKXcGDEmSlDsDhiRJyp0BQ5Ik5c6AIUmScmfAkCRJuTNgSJKk3BkwJElS\n7gwYkiQpdwYMSZKUOwOGJEnKnQFDkiTlzoAhSZJyZ8CQJEm5K1XAiIjLIuKOiNgZEX0Rcc2w+29p\n3D746++Laq8kSRpdqQIGMAPYBHwESGMc8xXgFODUxtfSzjRNkiQ1a3rRDRgspfRV4KsAERFjHPZC\nSunJzrVKkiS1qmw9GM34xYjYHRE/iYibIuLEohskSZKGKlUPRhO+Avwt8AiwALgB+PuIuDSlNNaQ\niiRJ6rBK9WCklL6YUvq7lNL/SindAbwNuBj4xWJbJqko+/fvZ82aNcw7fR7Tpk9j3unzWLNmDfv3\n7y+6aVJXi7J+8I+IPuDtjSAx3nFPAH+YUvpvY9y/GNhw+eWXM2vWrCH3LV26lKVLrRGVqmr//v1c\n8UtXsOlHm+g7tw9OAx6Hngd6OP+88/n2t77NzJkzi26mVAnr169n/fr1Q27bu3cvd999N8CSlNLG\nVh6v0gEjIuYCjwG/mlL6uzGOWQxs2LBhA4sXL25PYyUVYs2aNaxas4q+D/RB76A7dkHPLT2sWrmK\nlStXFtY+qeo2btzIkiVLYBIBo1RDJBExIyLOi4jzGzed2fh+XuO+GyPitRFxekRcCdwOPAR8rbhW\nSyrKupvXZT0XvcPu6IW+c/pYd/O6QtolqWQBA7gQuA/YQLYOxqeAjcAngEPAa4AvAf8M/Dfgh8Dl\nKaWXCmmtpELt2rkrGxYZTW/jfkmFKNUskpTStxk/9FzdqbZIKr/eOb3seHzH6Hfuyu6XVIyy9WBI\nUtOWf3g5PQ/0wPCOil3Q82APyz+8vJB2STJgSKqwFStWcP5559NzS082ePpD4EtZgef5553PihUr\nim6i1LUMGJI6Ks91K2bOnMm3v/VtVq1cxdw9c+n5ag9z98xl1cpVTlGVClbaaap5cZqqVB6uWyFV\nS22mqUqqt7Vr12bh4gN9cA1wEXAN9H2gj00/2sTatWuLbqKknBgwJHWM61ZI3cOAIamtBtdc7Ni2\nA34CfBt4YdiBFVq3wv1PpImVah0MSfUyoubiXOBx4Dtka/C+FziqcXBF1q0Y7Zx2PL6DVWtWcfsd\nt1tHIjXYgyGpbcaqueCDwG7g+40DK7RuhXUkUnMMGJLaZryaC84FfkDl1q2wjkRqjgFDUttMtFcI\nz1K5dSvc/0RqjjUYktpmor1C5s6fy/bHtne2UVPk/idSc+zBkNQ2ddwrpI7nJLWDAUNS29Rxr5Ci\nz8kpsqoKA4aktqnjXiFFnlP/FNlVa1axY/YO+q7uY8fsbIrsFb90hSFDpeJeJJJUEWvWrGHVmlXZ\nFNnBpR67sh6UVStXsXLlysLap/pxLxJJ6gJOkVWVGDAkqSKcIqsqMWBIUkX0zunNllofjVNkVTIG\nDEkapMyzNIqYIlvm50PlZpGnJDWM2MjsNOBx6Hkgm4Ja9MyXIe07pw9OBu4n29clQe/cXq77zetY\nsWJFLu0s+/Oh9rPIU5JyUPaNzAZPke19she+DjwBnA+8BXa9fFeuU1bL/nyo3AwYkmohj678KszS\nmDlzJitXruS65dfRM60HPkTbLv5VeD5UXgYMSZWX1wJUVZql0YmLf5WeD5WPAUNS5X3yk5/kvo33\n0Xd0H9wHfBeYBX3LWvs0X6VZGp24+Ffp+VD5GDAkVdr+/fu58T/fSIoEZwFvAc4EvgPcCX2Lmv80\nX6WNzDpx8a/S86HyMWBIo3BqXnWsXbuWlw6+NKIWgQ+Sza54vvlP80VvZNaKTlz8q/R8qHwMGNIw\nbihVLetuXgfnMWotAucCj8Gpp53aVGCs0uZsnbj4V+n5UPm4DoY0jBtKVcu06dPou7ov67kY7ofA\nl+G0Oaex+4ndtVvLYf/+/axdu5Z1N69j185d9M7pZfmHl+e2DoY0lXUwDBjSMPNOn8eO2Tuybvbh\nvgRz98xl+2PbO94ujW6i16vn/h7owcAoTYILbUk5qvvUvLrVl4xXixAPBDNmznAtB6kABgxpmDpP\nzatjfcl4tQgXnH8BB/YfqHVglMrKgCENU+epeXVc+nmiQsQ6B0apzAwY0jBlmZrXP5QxZ94cenp6\nmH7kdHqm9TBn/pxJD2nUdenn/uWztz+2nUMHD7H9se2sXLmSmTNnVjIwDh/GmjNvDldeeSVz5s+p\nxbCWuoNFntIoiq7O7x/KuG/TfaSjEjxPNhVzijMgJppx0fPVHg4dPJTTWZTDiB1IezkcLso4i2TE\nDqYvB+4ht/eA1AqLPKWcjfeJuBP6hzLS+QleILcNrbpxuKBqazmMGMZ6kVzfA1KnGDCkDmh15sbh\noYytwGvIbUijisMFeSg6MLZixDDWfeT6HpA6xYAhtdlkZm4cniq7l1xnQJSlvkRjGzFNOuf3gNQp\nBgypzSYzc+PwUMYsch3SqNpwQTcaMYyV83tA6hQDhtRmk5m5cXgoYyFwP7kOaVRpuGAqqrqg2Ihh\nrAvI/T0gdYIBQ2qzyawM2j+UEZsCjgL+kjGHNKp6IR0uz/MYdVjqZTv4+KqPc+LsE0v9PI0YxjqS\nCd8DUimllGr9BSwG0oYNG5JUhLnz5yYWk1g1ytcFpLnz5476c/v27UurV69OvXN7U0SkaUdMS9ET\nqXdeb1q9enXat29f2rdvX1p84eLUc0RP9jveSmIxqeeInrT4wsVp3759HT7bycn7PFavXp091vLG\n83w9iTkkplOJ56n/tZ87f27qmdaTeuf2pje84Q2pd15v6pnWk+bOn3v4PSC104YNGxKQgMWpxeuv\nPRhSm0125kb/UMbO7Tvp6+vj4IsH6TvUx85tOw8PadRlZc68z2PEsNT3gd3AB6nE8zR8GGvn9p3c\ndddd7Ny2s9bDWqoXF9qS2qydCz3VZefXvM9jxIJinwbOpPLPk9RpLrQllVg7Z250cufXdtZ65H0e\nI2Zi5DDVsy61LlKnGDCkDmjXzI1OrczZ7l1Y8z6PEcNSU5zqWcddaKV2M2BIbdKJT7ydWpmz3bUe\neZ/HiJkYJwM/YtKPX5daF6mTrMGQ2mDEhlVt2qCqUxt55VkjMdpGcu/739/Hl7/yZe5/4P7czmPw\n79m5YyfTj5jOwUMHSeemlh+/LrUuUquswZBKplOfeDu1MmdeNRJjDTXccOMNpJT4g9//g9zOY/Cw\nVN+hPp5+6mk+8UefmNTjd7LWRaoLA4bUBpNZvXOymq3vmOyQzf79+5k2fVouNRLjBa8HHnyAI488\nsm0rjE6lDqYbd6EFC1s1NQYMqQ3K9ol3KkWKa9eu5eBLB8dcrjoeiKZrJDoZvPLUjbvQWtiqqSpV\nwIiIyyLijojYGRF9ETFixDMiVkfEroh4NiK+HhELi2irNJ6yfeKdypDNupvXZXULpwB/xZDlqvlL\nmD5tetPLVZcteDWrG3ehtbBVU1WqgAHMADYBHyFbmnSIiPh94LeB5cDFwAHgaxFxZCcbKU2kbJ94\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1f6a6945a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from numpy import *\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "#加在数据集\n",
    "def loadDataSet():\n",
    "    dataMat = []\n",
    "    labelMat = []\n",
    "    fr = open('testSet.txt')\n",
    "    for line in fr.readlines():\n",
    "        lineArr = line.strip().split()\n",
    "        #为了便于截距b的计算，在数据集首尾加了一项1.0\n",
    "        dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])\n",
    "        labelMat.append(int(lineArr[2]))\n",
    "    return dataMat, labelMat\n",
    "\n",
    "#sigmoid函数\n",
    "def sigmoid(inX):\n",
    "    return 1.0/(1+exp(-inX))\n",
    "\n",
    "#梯度上升\n",
    "def gradAscent(dataMatIn, classLabels):\n",
    "    \n",
    "    dataMatrix = mat(dataMatIn)#由一维或二维数据创建矩阵\n",
    "    labelMat = mat(classLabels).transpose()#矩阵转置\n",
    "    m,n = shape(dataMatrix) #m=100 n=3\n",
    "  \n",
    "    alpha = 0.001           #移动步长，学习率\n",
    "    maxCircles = 150               #迭代次数\n",
    "    weights = ones((n,1))   \n",
    "       #n*1\n",
    "    for k in range(maxCircles):\n",
    "        h = sigmoid(dataMatrix*weights)\n",
    "        #该处推导见博文\n",
    "        \n",
    "        error = labelMat-h\n",
    "        #print (\"h:\",h,\"labelmat\",labelMat,\"error\",error)\n",
    "        weights = weights + alpha*dataMatrix.transpose()*error\n",
    "    return weights\n",
    "\n",
    "#随机梯度上升基本函数\n",
    "def stoGradAscent0(dataMatrix,classLabels, numIter=150):\n",
    "    m,n = shape(dataMatrix)\n",
    "    alpha = 0.001\n",
    "    weights = ones(n)\n",
    "    for _ in range(numIter):\n",
    "        for i in range(m):\n",
    "            h = sigmoid(sum(dataMatrix[i]*weights))\n",
    "            error = classLabels[i] - h\n",
    "            weights = weights + alpha*error*dataMatrix[i]\n",
    "    return weights\n",
    "\n",
    "#随机梯度上升改进函数\n",
    "#共3处改进：多轮随机梯度下降，每次更新权重是在随机选取的样本电上，步长alpha随着训练的进行逐渐减小（开始时较大）。（即自适应学习率）\n",
    "def stoGradAscent1(dataMatrix, classLabels, numIter=150):\n",
    "    m, n = shape(dataMatrix)\n",
    "    weights = ones(n)\n",
    "    for j in range(numIter):\n",
    "        for i in range(m):\n",
    "            alpha = 4/(1.0+i+j) + 0.01\n",
    "            #随机选取计算梯度使用的样本点\n",
    "            randIndex = random.randint(0,m-1)\n",
    "            h = sigmoid(sum(dataMatrix[randIndex]*weights))\n",
    "            error = classLabels[randIndex] - h\n",
    "            weights = weights + alpha*error*dataMatrix[randIndex]\n",
    "    return weights\n",
    "\n",
    "#可视化分类效果：画出决策边界\n",
    "def plotBestFit(weights):\n",
    "    import matplotlib.pyplot as plt\n",
    "    dataMat,labelMat=loadDataSet()\n",
    "    dataArr = array(dataMat)\n",
    "    n = shape(dataArr)[0] \n",
    "    xcord1 = []; ycord1 = []\n",
    "    xcord2 = []; ycord2 = []\n",
    "    for i in range(n):\n",
    "        if int(labelMat[i])== 1:\n",
    "            xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2])\n",
    "        else:\n",
    "            xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2])\n",
    "    fig = plt.figure()\n",
    "    ax = fig.add_subplot(111)\n",
    "    ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')\n",
    "    ax.scatter(xcord2, ycord2, s=30, c='green')\n",
    "    x = arange(-3.0, 3.0, 0.1)\n",
    "    y = (-weights[0]-weights[1]*x)/weights[2]\n",
    "    ax.plot(x, y)\n",
    "    plt.xlabel('X1'); plt.ylabel('X2');\n",
    "    plt.show()\n",
    "\n",
    "#测试不同优化算法所得到的分类器分类效果\n",
    "dataArr, labelMat = loadDataSet()\n",
    "weights0 = gradAscent(dataArr, labelMat)\n",
    "plotBestFit(weights0.getA())\n",
    "weights1 = stoGradAscent0(array(dataArr), labelMat)\n",
    "plotBestFit(weights1)\n",
    "weights2 = stoGradAscent1(array(dataArr), labelMat)\n",
    "plotBestFit(weights2)\n",
    "            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-12-04T03:40:31.249594Z",
     "start_time": "2018-12-04T03:37:43.429916Z"
    },
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\programdata\\anaconda3\\envs\\tensorflow\\lib\\site-packages\\ipykernel_launcher.py:18: RuntimeWarning: overflow encountered in exp\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the error rate of this test is: 0.268657\n",
      "the error rate of this test is: 0.567164\n",
      "the error rate of this test is: 0.358209\n",
      "the error rate of this test is: 0.388060\n",
      "the error rate of this test is: 0.388060\n",
      "the error rate of this test is: 0.283582\n",
      "the error rate of this test is: 0.268657\n",
      "the error rate of this test is: 0.283582\n",
      "the error rate of this test is: 0.253731\n",
      "the error rate of this test is: 0.283582\n",
      "after 10 iterations the average error rate is: 0.334328\n"
     ]
    }
   ],
   "source": [
    "#预测病马的死亡率\n",
    "#分类\n",
    "def classifyVector(inX, weights):\n",
    "    prob = sigmoid(sum(inX*weights))\n",
    "    if prob > 0.5:\n",
    "        return 1.0\n",
    "    else:\n",
    "        return 0.0\n",
    "    \n",
    "def colicTest():\n",
    "    frTrain = open('horseColicTraining.txt'); frTest = open('horseColicTest.txt')\n",
    "    trainingSet = []; trainingLabels = []\n",
    "    for line in frTrain.readlines():\n",
    "        currLine = line.strip().split('\\t')\n",
    "        lineArr =[]\n",
    "        for i in range(21):\n",
    "            lineArr.append(float(currLine[i]))\n",
    "        trainingSet.append(lineArr)\n",
    "        trainingLabels.append(float(currLine[21]))\n",
    "    trainWeights = stoGradAscent1(array(trainingSet), trainingLabels, 1000)\n",
    "    errorCount = 0; numTestVec = 0.0\n",
    "    for line in frTest.readlines():\n",
    "        numTestVec += 1.0\n",
    "        currLine = line.strip().split('\\t')\n",
    "        lineArr =[]\n",
    "        for i in range(21):\n",
    "            lineArr.append(float(currLine[i]))\n",
    "        if int(classifyVector(array(lineArr), trainWeights))!= int(currLine[21]):\n",
    "            errorCount += 1\n",
    "    errorRate = (float(errorCount)/numTestVec)\n",
    "    print (\"the error rate of this test is: %f\" % errorRate)\n",
    "    return errorRate\n",
    "\n",
    "def multiTest():\n",
    "    numTests = 10; errorSum=0.0\n",
    "    for k in range(numTests):\n",
    "        errorSum += colicTest()\n",
    "    print (\"after %d iterations the average error rate is: %f\" % (numTests, errorSum/float(numTests)))\n",
    "\n",
    "multiTest()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
